// app.js
App({
  /**登录凭证token是指用户的登录状态，用户的所有操作都必须携带token。实现流程如下：
   * 1. 先判断用户是否已经登录，即缓存中是否已经有token；
   * 2. 如果缓存中有token则无需再登录，用户的操作都需要发送token验证身份，但是token可能会因为多终端登录等原因过期，
   *    如token过期则需要让用户重新登录，所以取到token后要校验登录；
   * 3. 如果缓存中没有token，则让用户登录，登录时分为两种情况：
   *    （1）用户已存在：在服务端根据用户发送的code生成唯一的openId，并且在数据库中查询到此openId，说明此用户已存在：
   *        a）生成新的token，并更新数据库中旧token；
   *        b）把新token发回小程序端，更新缓存。
   *     (2) 用户不存在：在数据库中没有查询到用户的openId，说明此用户不存在：
   *        a）在服务端的数据库表user中，新添加一个用户；
   *        b）生成token，并关联用户的openId、token，并关联userId（方便在其他数据库表中关联）；
   *        c）把token返回到小程序端缓存。
   */
  // 打开小程序最先执行的是onLaunch函数，实际开发中长用来做登录判断、存储/更新缓存等操作
  onLaunch() {
    //取出数据缓存storage中token，并发送到服务端校验是否有效
    var token = wx.getStorageSync('token');
    if (token) {
      // 校验token有效性
      //this.checkLogin(token);
   // } else {
      this.login(); // 微信登录获取code，并发送到服务端更新token
    }else{
      this.login();
    }
  },

  // 发送token到服务端校验
  checkLogin: function(token){
    wx.request({
      url: 'http://127.0.0.1:3000/checklogin',
      data:{token: token},
      success: res => {
        if(res.data.is_login){  // token有效
          this.globalData.token = token;
          // 全局变量赋值后，执行回调函数，完成index中的操作
          // 如果getCreditCallback不为空，说明在index中定义了getCreditCallback函数，此时将回调执行此函数
          if (this.getCreditCallback) {
            this.getCreditCallback();
          }
        }else{    // token无效
          this.login();
        }
      }
    })
  },

  // 登录
  login: function(){
    wx.login({
      success: res => {
        console.log('login code:'+res.code)
        // 发送 res.code 到后台换取登录凭证token
        wx.request({
          url: 'http://localhost:8080/case5Web/login',
          data: {
            code: res.code
          },
          header: {
            'content-type': 'application/x-www-form-urlencoded',
            'Accept': 'application/json'
          },
          method: 'POST',
          success: res => {
            console.log(res)
            // 将token设置为全局变量
            console.log('token: '+res.data.data.token)
            this.globalData.token = res.data.data.token;
            console.log('credit: '+res.data.credit);
            this.globalData.credit = res.data.credit;
            if (this.getCreditCallback) {
              this.getCreditCallback();
            }
            // 同时将token存入数据缓存storage中
            wx.setStorage({
              data: res.data.data.token,
              key: 'token'
            })
          }
        })
      }
    })
  },

  // 全局变量
  globalData: {
    token: null,
    credit:null,
    userInfo: null
  }
})